package com.csx.governance.traffic.core;

import com.csx.governance.traffic.core.context.TrafficMessage;

import java.util.Map;

/**
 * TrafficMessage 请求对象的参数解析器，解析结果为一个用于进行条件匹配的Map
 * @author cuisongxu
 * @date 2023/4/2 16:14
 */
public interface TrafficMessageParameterExtractor {

    /**
     * 解析请求，获取一个用于条件匹配的Map
     * @param trafficMessage 请求对象
     * @return 封装了用于条件匹配参数的Map
     */
    Map<String, Object> extract(TrafficMessage trafficMessage);

    /**
     * 判断解析器是否支持解析指定类型的请求
     * @param clazz 请求类型
     * @return 布尔值. true表示支持; false表示不支持
     */
    default Boolean isSupport(Class<?> clazz) {
        return true;
    }
    /**
     * parameter的数据源。
     * @return
     */
    ParameterSource parameterSource();

    enum ParameterSource {
        /**
         * 请求头
         */
        HEADER,

        /**
         * 请求参数
         */
        QUERY;
    }
}
